/**
 * @param {string} s
 * @return {number}
 * @description 队列
 */

var lengthOfLongestSubstring = function (s) {
    let map = new Map()
    let len = s.length
    // 答案数组
    let res = []
    // 运营数组
    let queue = []
    let flag = true
    for (let i = 0; i < len; i++) {
        queue.push(s[i])
        // 如果没有出现过这个字母
        // 将之放入map中
        if (!map.has(s[i])) {
            map.set(s[i], i)
        } else {
            // 移除数组头部 直到arr中无s[i]
            while (flag) {
                let val = queue.shift()
                if (val === s[i]) {
                    flag = false
                } else {
                    // 删除map中的s[i]元素
                    map.delete(val)
                }
            }
            flag = true
        }
        // 选择长度长的为答案数组
        if (res.length < queue.length) {
            res = queue.slice()
        }
    }
    return res.length
};